package exceptionManager;

import com.itextpdf.text.BadElementException;
import com.itextpdf.text.DocumentException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import javax.swing.text.BadLocationException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;

/**
 * Dene klasse håndterer alle exceptions, med et simpelt kald til den metode, som håndterer den givne exception<br />
 * Skriv handleSQLException for at håndtere SQLException<br />
 * Skriv handleException for at håndtere Exception<br />
 * etc<br />
 * @author Sonny Sandberg
 */
public abstract class ExceptionManager 
{
    /**
     * Pops up a JOptionPane with error message
     * @param ex
     * @return 
     */
    public static JOptionPane handleSQLException(SQLException ex)
    {
        JOptionPane option = createDialog("SQL Exception", switchErrorCode(ex.getErrorCode()));
        return option;
    }
    
    public static JOptionPane handleClassNotFoundException(ClassNotFoundException ex)
    {
        JOptionPane option = createDialog("ClassNotFound Exception", "Der er opstået en Exception "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleMalformedURLException(MalformedURLException ex)
    {
        JOptionPane option = createDialog("MalformedURL Exception", "Der er opstået en Exception "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleParserConfigurationException(ParserConfigurationException ex)
    {
        JOptionPane option = createDialog("ParserConfiguration Exception", "Der er opstået en Exception "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleSAXException(SAXException ex)
    {
        JOptionPane option = createDialog("SAX Exception", "Der er opstået en Exception "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleIOException(IOException ex)
    {
        JOptionPane option = createDialog("IO Exception", "Der er opstået en fejl i forbindelse med skrivning eller læsning fra den specificerede fil.\n Systembesked: "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleBadElementException(BadElementException ex)
    {
        JOptionPane option = createDialog("BadElement Exception", "Der er opstået en Exception "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleBadLocationException(BadLocationException ex)
    {
        JOptionPane option = createDialog("BadLocation Exception", "Der er opstået en Exception "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleDocumentException(DocumentException ex)
    {
        JOptionPane option = createDialog("Document Exception", "Der er opstået en Exception "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleFileNotFoundException(FileNotFoundException ex)
    {
        JOptionPane option = createDialog("Document Exception", "Filen blev ikke fundet. \nKontakt Administratoren!");
        return option;
    }
    
    public static JOptionPane handleException(Exception ex)
    {
        JOptionPane option = createDialog("Exception", "Der er opstået en Exception "+ ex.getMessage() + "\nKontakt Administratoren!");
        return option;
    }
    
    private static JOptionPane createDialog(String headline, String text)
    {
        JOptionPane optionPane = new JOptionPane();
        optionPane.showMessageDialog(null,
        text,
        headline,
        JOptionPane.ERROR_MESSAGE);
        
        return optionPane;
    }
    
    private static String switchErrorCode(int errorCode)
    {
        String errorString;
        switch (errorCode)
        {
            case 0:
                errorString = "Ingen forbindelse til databasen.\nUkendt Server.\nKontakt Administratoren!";
            break;
            case 1045:
                errorString = "Ingen forbindelse til databasen.\nAdgang nægtet.\nForkert brugernavn eller adgangskode.\nKontakt Administratoren!";
            break;
            case 1049:
                errorString = "Ingen forbindelse til databasen.\nDatabasen eksisterer ikke.\nKontakt Administratoren!";
            break;    
            case 1054:
                errorString = "Fejl i forbindelse med database.\nConstraint Error: Parent / Child\nKontakt Administratoren!";
            break;    
            case 1146:
                errorString = "Fejl i databasen.\nTabellen eksisterer ikke.\nKontakt Administratoren!";
            break;
            case 1366:
                errorString = "Fejl i databasen.\nIkke korrekt heltals værdi angivet.\nKontakt Administratoren!";
            break;
            case 1451:
                errorString = "Fejl i forbindelse med database.\nConstraint Error: Parent / Child\nKontakt Administratoren!";
            break; 
            case 1452:
                errorString = "Fejl i forbindelse med database.\nConstraint Error: Parent / Child\nKontakt Administratoren!";
            break; 
            default:
                errorString = "Der er opstået en ukendt fejl i forbindelse med databasen.\nKontakt Administratoren!"
                        + "\nFejlkode: "+errorCode;
            break;
        }
        
        return errorString;
    }
}